package main

import (
	"context"
	"fmt"
	"go_stu/src/day02Demo7/pb"
	"strconv"

	"github.com/hashicorp/consul/api"
	"google.golang.org/grpc"
)

func main() {

	// 1初始化 consul 配置
	consulConfig := api.DefaultConfig()
	// 创建consul对象 ---可以重新指定consul 属性：，也可以用默认
	consulClient, err := api.NewClient(consulConfig)

	// 服务发现，从consul上获取健康的服务网
	// 传入的参数为：consulClient.Health().Service(服务名, 别名, 是否通过健康检测, 其他查询参数（一般为nil）)
	// 返回值： 服务的切片、额外查询返回值
	services, _, err := consulClient.Health().Service("grpc And Consul", "grpc", true, nil)

	// 获取到对应的地址和端口号
	addr := services[0].Service.Address + ":" + strconv.Itoa(services[0].Service.Port)
	// fmt.Println(addr)
	////////////////////////// 以下为grpc服务远程调用 ///////////////////////////////
	// 1. 连接grpc服务
	// grpcConn, _ := grpc.Dial(":8800", grpc.WithInsecure())
	// 1.1 使用服务发现consul上的IP/port来与服务器建立连接 , WithInsecure表示安全的
	grpcConn, _ := grpc.Dial(addr, grpc.WithInsecure())
	// 2. 初始化 grpc 客户端
	grpcClient := pb.NewHelloClient(grpcConn)

	var person pb.Person
	person.Name = "Alange"
	person.Age = 18
	// 3. 调用远程函数
	p, err := grpcClient.SayHello(context.TODO(), &person)
	fmt.Println("p is ", p)
	fmt.Println("err is ", err)
}
